import Request from 'luch-request'

// const baseURL = 'http://192.168.4.11:81/dev-api'
// const baseURL = 'http://111.231.22.215:8888'
// const baseURL = 'http://47.116.162.38:81'
const baseURL = 'https://fangke.reczk.com.cn/prod-api/dev-api'
// const baseURL = 'http://192.168.110.100:81/dev-api'
const http = new Request();
let needLoadingRequestCount = 0;
let loadingTimer;

function showLoading(nowPage) {
	if (needLoadingRequestCount === 0) {
		// #ifdef H5
		nowPage.$refs.loading.open()
		// #endif
		// #ifndef H5
		nowPage.$vm.$refs.loading.open()
		// #endif
		// 最长10s自动关闭
		loadingTimer = setTimeout(() => {
			if (needLoadingRequestCount > 0) {
				// #ifdef H5
				nowPage.$refs.loading.close()
				// #endif
				// #ifndef H5
				nowPage.$vm.$refs.loading.close()
				// #endif
			}
		}, 10000);
	}
	needLoadingRequestCount++;
}
function hideLoading(nowPage) {
	if (needLoadingRequestCount <= 0) return;
	needLoadingRequestCount--;
	if (needLoadingRequestCount === 0) {
		loadingTimer && clearTimeout(loadingTimer);
		// #ifdef H5
		nowPage.$refs.loading.close()
		// #endif
		// #ifndef H5
		nowPage.$vm.$refs.loading.close()
		// #endif
	}
}

http.setConfig((config) => { /* 设置全局配置 */
	config.baseURL = baseURL
	config.header = {
		...config.header,
		lyc: 520
	}
	config.custom = {
		loading: false
	}
	return config
})

 /* 请求之前拦截器 */
http.interceptors.request.use((config) => { // 可使用async await 做异步操作
	let token = uni.getStorageSync('token')
	let pages = getCurrentPages();  //获取所有页面栈实例列表
	let nowPage = pages[pages.length - 1]; // 当前页页面实例
	config.header = {
	  ...config.header
	}
	if (config.custom.loading) { // 打开页面组件加载中...
		showLoading(nowPage)
	}
	/**
	 * 自定义验证器，如果返回true 则进入响应拦截器的响应成功函数(resolve)，否则进入响应拦截器的响应错误函数(reject)
	 * @param { Number } statusCode - 请求响应体statusCode（只读）
	 * @return { Boolean } 如果为true,则 resolve, 否则 reject
	 */
	config.validateStatus = (statusCode) => {
		if (config.custom.loading) { // 取消页面组件加载中...
			hideLoading(nowPage)
		}
	    return statusCode === 200
	}
	if (config.url.indexOf('login') == -1) { // 不是登录页
		if (!token) { // 如果token不存在
		  return Promise.reject(config) // return Promise.reject(config) 会取消本次请求
		} else {
			config.header['Authorization'] = token
		}
	}
    return config
}, config => { // 可使用async await 做异步操作
    return Promise.reject(config)
})

 /* 请求之后拦截器 */
http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
	if (response.data.code === "5001") { // 服务端返回的状态码不等于200，则reject()
		uni.showToast({
			title: response.data.msg,
			icon: 'none',
			duration: 3000
		})
		return Promise.reject(response) // return Promise.reject 可使promise状态进入catch或then第二个函数来捕获该错误信息，写了catch优先
	}
    console.log(`${response.config.custom.interfaceName}- 响应成功：`, response)
    return response.data
}, (response) => { /*  对响应错误做点什么 （statusCode !== 200）*/
	if (response.data.code == 401) {
		uni.removeStorageSync('tokenInfo') // 权限过期，移除缓存的用户信息
		uni.removeStorageSync('userInfo') // 权限过期，移除缓存的用户信息
		if (!getApp().globalData.loading) {
			getApp().globalData.loading = true
			uni.showModal({
				title: '提示',
				content: (response.data.msg || 'token过期或权限认证失败，请重新登录！'),
				showCancel: false,
				success: (res) => {
					if (res.confirm) {
						uni.reLaunch({
							url: '/pages/login/login',
							success: () => {
								getApp().globalData.loading = false
							}
						})
					}
				}
			})
		} else {
			return
		}
	} else {
		if (response.statusCode === 403) {
			uni.showToast({
				title: '权限不足！',
				icon: 'none',
				duration: 1500
			})
			setTimeout(() => {
				uni.navigateTo({
					url: '/pages/other/403'
				})
			}, 500)
		} else {
			uni.showToast({
				title: response.config.url+'请求异常，状态码：'+ (response.statusCode || response.data.code || '未知错误'),
				icon: 'none',
				duration: 3000
			})
		}
	}
	console.log(`${response.config.custom.interfaceName}- 响应错误：`, response)
  return Promise.reject(response)
})

export {
	http,
	baseURL
}